package cn.wen.java.sql.utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import cn.wen.bases.framework.spring.TokenOfSpring;
import cn.wen.bases.framework.spring.UtilsOfSpring;

/**
 * Title：DB 工具类
 * <p>
 * Description：
 * <p>
 * Copyright：Copyright (c) 2010-2012
 * 
 * @author <a href="mailto:ct_wen@qq.com">ctwen</a>, 温承瑭
 * @version Revision：1.0 Date：2010/11/20 Description：初完成。
 *          <p>
 *          Revision：1.5 Date：2010/11/30 Description：修订获取数据源、库连接对象方法。
 *          <p>
 */
public class UtilsOfDB {

    private static Logger log = Logger.getLogger(UtilsOfDB.class);

    /**
     * 数据源对象
     */
    private static volatile DataSource dataSource;

    /**
     * 获取一个数据库连接对象，该方法是线程安全的。
     * 
     * @return 连接对象。
     * @throws SQLException
     */
    @Deprecated
    public static synchronized Connection getConnection() throws SQLException {
	return getDataSource().getConnection();
    }

    /**
     * 当前数据源对象。
     */
    public static DataSource getDataSource() {
	if (dataSource == null) {
	    // 初始化dataSource……
	    dataSource = UtilsOfSpring.getBean(TokenOfSpring.DATASOURCE_TOKEN, DataSource.class);
	}
	return dataSource;
    }

    /**
     * 释放连接
     * 
     * @param conn 数据库接连对象
     * @return
     */
    public static void disconnect(Connection conn) {
	try { // 关闭库连接对象。
	    if (conn != null && conn.isClosed()) {
		conn.close();
	    }
	}
	catch (SQLException e) {
	    log.error(e.getMessage(), e);
	}
    }

}
